//
// Created by subject on 2025/6/19.
//

#ifndef FOUR_SENSOR_ALL_IMUMANAGER_H
#define FOUR_SENSOR_ALL_IMUMANAGER_H

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
#include <atomic>
#include <memory>
#include <vector>
#include <algorithm>
#include <queue>

#include "LogUtils.h"

#include "INxrSensorClient.h"
#include "NxrMoudle.h"
#include "NxrSensorTypes.h"

#include "ErrorCode.h"

using namespace nxr_client;
using namespace android;


class ImuManager {

public:
//    单例实例的静态方法
    static ImuManager &getInstance() {
        static ImuManager instance;
        return instance;
    }

//    删除拷贝构造函数和赋值操作符，避免实例复制


//    开启imu
    int startImu();

//    关闭imu
    int stopImu();

//    注册回调函数
    void registerCallback(const std::function<void(NxrRawData)> &callback);

//    销毁回调函数
    void removeCallback(const std::function<void(NxrRawData)>& callback);
//    销毁所有回调函数
    void clearAllCallbacks();
//    唤起回调函数

private:
// 私有构造函数，防止外部实例化
    ImuManager();

//    私有析构函数
    ~ImuManager();

// 线程函数
    void threadFunction();

//    调用注册的回调
    void callCallbacks(const NxrRawData &data);

    // 成员变量
    INxrSensorClient *_vsc;; // 指向 INxrSensorClient 的指针
    std::mutex imuMtx;                       // 互斥量
    std::condition_variable cv;               // 条件变量
    std::thread imuThread;                    // 用于处理 IMU 的线程
    std::atomic<bool> isImuOn;               // IMU 状态标志

    // 回调管理
    std::queue<std::function<void(NxrRawData)>> callbackQueue; // 存储回调函数
    std::mutex callbackMtx;   // 保护回调队列的互斥量

};

#endif //FOUR_SENSOR_ALL_IMUMANAGER_H
